/**
 * 书单服务接口，提供与书单相关的业务操作
 */
package com.wanqing.service;

import com.wanqing.dto.BookListDTO;
import com.wanqing.dto.BookListPageQueryDTO;
import com.wanqing.entity.BookList;
import com.wanqing.result.PageResult;
import com.wanqing.vo.BookItemVO;
import com.wanqing.vo.BookListVO;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * 书单服务接口定义
 */
public interface BookListService {
    /**
     * 分页查询书单信息
     *
     * @param bookListPageQueryDTO 分页查询条件封装对象
     * @return 分页查询结果
     */
    PageResult pageQuery(BookListPageQueryDTO bookListPageQueryDTO);

    /**
     * 保存书单及其关联的图书
     *
     * @param bookListDTO 书单信息及其关联图书信息的封装对象
     */
    void saveWithBook(BookListDTO bookListDTO);

    /**
     * 根据ID查询书单及其关联的图书信息
     *
     * @param id 书单ID
     * @return 书单及其关联图书信息的封装对象
     */
    BookListVO getByIdWithBook(Long id);

    /**
     * 更新书单及其关联的图书信息
     *
     * @param bookListDTO 书单信息及其关联图书信息的封装对象
     */
    @Transactional
    void updateWithBook(BookListDTO bookListDTO);

    /**
     * 启用或停用书单
     *
     * @param status 书单状态，1为启用，0为停用
     * @param id     书单ID
     */
    void startOrStop(Integer status, Long id);

    /**
     * 批量删除书单
     *
     * @param ids 待删除的书单ID列表
     */
    @Transactional
    void deleteBatch(List<Long> ids);

    List<BookList> list(BookList bookList);

    List<BookItemVO> getBookItemById(Long id);
}
